/*
 * 1239. 方程的根
 * 给一个方程: ax2 + bx + c = 0. 求根。
 * 如果方程有两个根，就返回一个包含两个根的数组/列表。
 * 如果方程只有一个根，就返回一个包含一个跟的数组/列表。
 * 如果方程没有根，就返回一个空数组/列表。
 * https://www.lintcode.com/problem/root-of-equation/description
 * 
 * 样例
 * 给出 a = 1, b = -2, c = 1. 返回 [1].
 * 给出 a = 1, b = -3, c = 2. 返回 [1, 2]. 第一个数应比第二个数小。
 * 给出 a = 1, b = 1, c = 1. 返回 [].
 * 
 * 2018.06.10 @jeyming
 */
package root_of_equation_1239;

public class Root_of_equation_1239 {
    /*
     * @param a: parameter of the equation
     * @param b: parameter of the equation
     * @param c: parameter of the equation
     * @return: a double array, contains at most two root
     */
    public static double[] rootOfEquation(double a, double b, double c) {
        // write your code here
    	double judge = b * b - 4 * a *c;
    	double[] ans = null;
    	if(judge > 0) {
    		ans = new double[2];
    		judge = Math.sqrt(judge);
    		ans[0] = (-b - judge)/(2 * a);
    		ans[1] = (-b + judge)/(2 * a);
    		if(ans[0] > ans[1]) {
    			judge = ans[0];
    			ans[0] = ans[1];
    			ans[1] = judge;
     		}
    	} else if(judge == 0) {
    		ans = new double[1];
    		ans[0] = (-b)/(2 * a);
    	} else {
    		return ans = new double [0];
    	}
    	return ans;
//    	double judge = b * b - 4 * a *c;
//    	List<Double> list = new ArrayList<Double>();
//    	if(judge > 0) {
//    		judge = Math.sqrt(judge);
//    		double firstNum = 0, secondNum = 0;
//    		firstNum = (-b - judge)/(2 * a);
//    		secondNum = (-b + judge)/(2 * a);
//    		if(firstNum > secondNum) {
//    			list.add(secondNum);
//    			list.add(firstNum);
//     		} else {
//    			list.add(firstNum);
//    			list.add(secondNum);
//     		}
//    	} else if(judge == 0) {
//    		list.add((-b)/(2 * a));
//    	} 
//    	return list;
    }

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		rootOfEquation(1,-2,1);
		rootOfEquation(1,-3,2);
		rootOfEquation(1,1,1);
	}

}
